![]() |
![]() |
|
rtk 19991999.1.2 (dopolni)1. podnalogaIz vesolja pričakuješ signal nezemeljske civilizacije. Utemeljeno lahko pričakuješ, da bo sporočilo poslano v jeziku, ki uporablja angleško abecedo 26 malih črk in zadošča naslednjim pravilom:
NalogaDopolni funkcijo
Vhodni podatkiSporočilo v obliki niza. Izhodni podatki
Primer
Uradna rešitevdef pravo(niz): '''Vrne True, če besedilo v niz ustreza vseh pogojem in False sicer.''' dovoljeni_znaki = 'abcdefghijklmnopqrstuvwxyz ' samoglasniki = ['a','e','i','o','u'] prejsnji_znak = '' for znak in niz: if znak not in dovoljeni_znaki: return False # nedovoljen znak if znak == prejsnji_znak: return False # podvojen znak if znak in samoglasniki and prejsnji_znak in samoglasniki: return False # zaporedna samoglasnika if prejsnji_znak == 'x' and znak != ' ': return False # x ni na koncu besede prejsnji_znak = znak return True 1999.1.3 (dopolni)1. podnalogaV besedilu iščemo besede, ki vsebujejo vsaj eno zvezdico ( NalogaDopolni funkcijo
Vhodni podatkiBesedilo v obliki niza. Izhodni podatkiNiz ustreznih besed, ločenih s presledki. Primer
Uradna rešitevdef besede(niz): '''Izpiše besede v katerih je vsaj ena zvezdica (*) in njihove naslednike''' vse_besede = niz.split(' ') vsebuje_zvezdico = False novo_besedilo = [] for beseda in vse_besede: if vsebuje_zvezdico == True and '*' not in beseda: novo_besedilo.append(beseda) if '*' in beseda: vsebuje_zvezdico = True novo_besedilo.append(beseda) else: vsebuje_zvezdico = False return ' '.join(novo_besedilo) 1999.1.4 (dopolni)1. podnalogaV državi Utopiji so ugotovili, da denar kvari ljudi, zato vsako leto izvedejo prerazporeditev bogastva. Vsako leto določijo, kolikšno je največje sprejemljivo premoženje. Za vsakega državljana popišejo, koliko premoženja ima; tistim, katerih premoženje presega največji dovoljeni znesek, vzamejo toliko, da mu ostane le še ta največji dovoljeni znesek. Največje sprejemljivo premoženje je določeno kot 150% povprečnega premoženja. Tako dobljeni denar razdelijo med najrevnejše državljane in to tako, da ima na koncu čim večje število najrevnejših državljanov enako in čim večje premoženje. Pri tem se vrstni red prebivalcev po bogastvu ne sme spremeniti: če je imel A prej vsaj toliko kot B, ima tudi po prerazporeditvi vsaj toliko kot B. NalogaDopolni funkcijo
Vhodni podatkiSeznam po velikosti urejenih celih števil, kjer vsako število predstavlja bogastvo nekega državljana. Omejitve vhodnih podatkov
Izhodni podatkiSeznam po velikosti urejenih celih števil, ki predstavljajo novo bogastvo. PrimerVhod
Izhod
KomentarNekatere nesprejemljive prerazporeditve so [90, 70, 120, 210, 210] (ker bi se spremenil vrstni red — prvi na seznamu ima zdaj več kot drugi), [40, 110, 120, 210, 210] (vrstni red se sicer ohrani, vendar je najrevnejši tukaj en sam, pri najboljši prerazporeditvi pa imata najrevnejša dva enako premoženje), [60, 60, 160, 210, 210] (najrevnejša dva imata sicer zdaj enako premoženje, vendar bi lahko dobila več). Uradna rešitevdef bogastvo(seznam): '''Enakomerno razporedi bogastvo med državljane.''' stevilo_drzavljanov = len(seznam) povprecje = int(sum(seznam) / stevilo_drzavljanov) najvecje_bogastvo = int(povprecje * 1.5) # odvzamemo bogastvo tistim, ki presegajo 150% povprečja bogastvo = 0 for i in range(stevilo_drzavljanov): drzavljan = seznam[i] if drzavljan > najvecje_bogastvo: bogastvo += drzavljan - najvecje_bogastvo seznam[i] = najvecje_bogastvo # določimo število prejemnikov prejemniki = 0 # število prejemnikov vsota = 0 # vsota prvotnih premoženj prejemnikov bogastva zmanjka_bogastva = False while prejemniki + 1 < stevilo_drzavljanov and not zmanjka_bogastva: # preverimo, če je bogastva dovolj, da ga razdelimo med vse ljudi pred # državljanom seznam[prejemniki] if vsota + bogastvo <= seznam[prejemniki] * prejemniki: zmanjka_bogastva = True else: vsota += seznam[prejemniki] prejemniki += 1 # razdelimo bogastvo revnim if prejemniki > 0: novo_bogastvo = int((vsota + bogastvo) / prejemniki) for k in range(prejemniki): seznam[k] = novo_bogastvo return seznamMesto objave ob koncu projekta 15.9.2018 |